// TypeScript类型定义
// 可以在这里定义项目中使用的各种类型

export interface PromotionDTO {
  name: string; // 活动名称
  description?: string; // 活动描述
  startTime: string; // 开始时间
  endTime: string; // 结束时间
  discountType: "PERCENT" | "AMOUNT" | "SPECIAL"; // 折扣类型
  discountValue: number; // 折扣值
  minOrderAmount?: number; // 最低订单金额
  status?: number; // 状态
}

export interface PromotionVO {
  id: number; // 促销活动ID
  name: string; // 活动名称
  description?: string; // 活动描述
  startTime: string; // 开始时间
  endTime: string; // 结束时间
  discountType: "PERCENT" | "AMOUNT" | "SPECIAL"; // 折扣类型
  discountValue: number; // 折扣值
  minOrderAmount?: number; // 最低订单金额
  status: number; // 状态
  createdAt: string; // 创建时间
}

export interface FoodCreateDTO {
  categoryId: number; // 商品分类ID
  name: string; // 商品名称
  price: number; // 商品售价
  originalPrice?: number; // 商品原价
  description?: string; // 商品描述
  image?: string; // 商品图片URL
  isFeatured?: number; // 是否特色商品
}

export interface FoodVO {
  id: number; // 商品ID
  storeId: number; // 所属店铺ID
  categoryId: number; // 所属分类ID
  name: string; // 商品名称
  price: number; // 商品售价
  description?: string; // 商品描述
  image?: string; // 商品图片URL
  sales: number; // 销量
  status: "OFF_SHELF" | "ON_SHELF" | "SUSPENDED" | "PENDING"; // 状态
}

export interface FoodStatusUpdateDTO {
  foodStatus: "OFF_SHELF" | "ON_SHELF" | "SUSPENDED" | "PENDING"; // 商品状态
}

export interface ResultVoid {
  status: number; // 状态码
  message: string; // 提示信息
  data?: any; // 返回数据
}

export interface FoodCategoryDTO {
  name: string; // 分类名称
  sort: number; // 排序顺序
}

export interface FoodCategoryVO {
  id: number; // 分类ID
  name: string; // 分类名称
  sort: number; // 排序字段
}

export interface OrderStatusUpdateDTO {
  orderStatus:
    | "ORDER_CREATED"
    | "PENDING"
    | "MERCHANT_CONFIRMED"
    | "COOKING"
    | "READY_WAITING_RIDER"
    | "RIDER_ASSIGNED"
    | "FOOD_PICKED"
    | "DELIVERING"
    | "DELIVERED"
    | "COMPLETED"
    | "CANCELLED"
    | "CONFIRMED"
    | "PREPARING"
    | "READY_FOR_PICKUP"
    | "PICKED_UP"
    | "DELIVERING"
    | "DELIVERED"
    | "CANCELLED"
    | "REFUNDED"; // 新的订单状态
}

export interface ReviewVO {
  id: number; // 评价ID
  userId: number; // 用户ID
  userName: string; // 用户名称
  userAvatar?: string; // 用户头像
  orderId: number; // 订单ID
  storeId: number; // 店铺ID
  storeName: string; // 店铺名称
  content: string; // 评价内容
  storeRating: number; // 店铺评分(1-5)
  riderRating: number; // 骑手评分(1-5)
  images?: string; // 评价图片URLs，以逗号分隔
  createdAt: string; // 创建时间
}

export interface ReviewVOPage {
  number: number; // 当前页码
  size: number; // 每页数量
  totalElements: number; // 总记录数
  totalPages: number; // 总页数
  content: ReviewVO[]; // 当前页数据列表
  page: number;
}

export interface HotFoodVO {
  foodId: number; // 商品ID
  foodName: string; // 商品名称
  foodImage?: string; // 商品图片
  saleCount: number; // 销售数量
  saleAmount: number; // 销售金额
}

export interface ReviewStatisticsVO {
  storeId: number; // 店铺ID
  storeName: string; // 店铺名称
  totalReviews: number; // 评价总数
  averageRating: number; // 平均评分
  ratingCounts: { [key: string]: number }; // 各评分数量统计
  goodRatePercentage: number; // 好评率(4-5星占比)
}

export interface StoreOrderReportVO {
  dateList?: string;
  totalOrderList?: string;
  newOrderList?: string;
}

export interface StoreTurnoverReportVO {
  dateList?: string;
  turnoverList?: string;
}

export interface StoreStatisticsVO {
  storeId: number; // 店铺ID
  storeName: string; // 店铺名称
  todayOrderCount: number; // 今日订单数
  todaySales: number; // 今日销售额
  yesterdayOrderCount: number; // 昨日订单数
  yesterdaySales: number; // 昨日销售额
  monthOrderCount: number; // 本月订单数
  monthSales: number; // 本月销售额
  totalOrderCount: number; // 总订单数
  totalSales: number; // 总销售额
  dailyOrderTrend?: StoreOrderReportVO;
  dailySalesTrend?: StoreTurnoverReportVO;
  hotFoods?: HotFoodVO[]; // 热销商品Top5
  reviewStatistics?: ReviewStatisticsVO;
}

export interface OrderVO {
  id: number; // 订单ID
  orderNo: string; // 订单编号
  storeId: number; // 店铺ID
  storeName: string; // 店铺名称
  storeImage?: string; // 店铺图片URL
  totalAmount: number; // 订单总金额 (商品金额)
  deliveryFee: number; // 配送费
  discountAmount: number; // 优惠金额
  paymentAmount: number; // 实际支付金额
  status:
    | "ORDER_CREATED"
    | "PENDING"
    | "MERCHANT_CONFIRMED"
    | "COOKING"
    | "READY_WAITING_RIDER"
    | "RIDER_ASSIGNED"
    | "FOOD_PICKED"
    | "DELIVERING"
    | "DELIVERED"
    | "COMPLETED"
    | "CANCELLED"; // 订单状态
  paymentStatus: number; // 支付状态
  createdAt: string; // 下单时间
}

export interface OrderDetailVO {
  id: number; // 订单ID
  orderNo: string; // 订单编号
  userId: number; // 用户ID
  storeId: number; // 店铺ID
  storeName: string; // 店铺名称
  addressId: number; // 收货地址ID
  deliveryAddress?: UserAddressVO;
  totalAmount: number; // 订单总金额 (商品金额)
  deliveryFee: number; // 配送费
  discountAmount: number; // 优惠金额
  paymentAmount: number; // 实际支付金额
  paymentType?: string; // 支付方式
  paymentStatus: number; // 支付状态
  orderStatus:
    | "ORDER_CREATED"
    | "PENDING"
    | "MERCHANT_CONFIRMED"
    | "COOKING"
    | "READY_WAITING_RIDER"
    | "RIDER_ASSIGNED"
    | "FOOD_PICKED"
    | "DELIVERING"
    | "DELIVERED"
    | "COMPLETED"
    | "CANCELLED"; // 订单状态
  remark?: string; // 订单备注
  expectedTime?: string; // 预计送达时间
  actualTime?: string; // 实际送达时间
  createdAt: string; // 下单时间
  paidAt?: string; // 支付时间
  shippedAt?: string; // 发货时间
  completedAt?: string; // 完成时间
  cancelledAt?: string; // 取消时间
  cancelReason?: string; // 取消原因
  riderId?: number; // 骑手ID
  riderName?: string; // 骑手姓名
  riderPhone?: string; // 骑手电话
  items?: OrderItemVO[]; // 订单项列表
}

export interface OrderItemVO {
  id: number; // 订单项ID
  foodId: number; // 商品ID
  foodName: string; // 商品名称
  foodImage?: string; // 商品图片URL
  price: number; // 商品单价
  quantity: number; // 数量
  amount: number; // 该项总金额
}

export interface UserAddressVO {
  id: number;
  receiver?: string;
  phone?: string;
  province?: string;
  city?: string;
  district?: string;
  detailAddress?: string;
  isDefault?: number;
}

export interface FileDeleteDTO {
  url?: string;
}
